from django.shortcuts import render
from rest_framework.generics import GenericAPIView
from rest_framework import serializers
from view07 import models
from rest_framework import pagination
from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet,ModelViewSet

class Userserializer(serializers.ModelSerializer):   #序列化类定义，前面章节已经介绍
    class Meta:
        model = models.UserInfo
        fields = '__all__'  #序列化字段

class Mypagination(pagination.PageNumberPagination):  # 分页类定义，前面章节也已经介绍
    """自定义分页"""
    page_size=2  #默认每页显示个数配置
    page_query_param = 'p' # 页面传参的key,默认是page
    page_size_query_param='size'  # 指定每页显示个数参数
    max_page_size=4 # 每页最多显示个数配置，使用以上配置，可以支持每页可显示2~4条数据


# 常规APIView


# GenericAPIView
# 该视图封装了常用的静态字段，用以调用
class UserView_API(GenericAPIView):            #视图
    queryset = models.UserInfo.objects.all()  #数据的queryset
    serializer_class = Userserializer         # 序列化类使用
    permission_classes = []                   # 权限认证，这里不做认证，前面章节也有介绍权限
    pagination_class = Mypagination #分页类，前面章节也已经介绍

    def get(self,*args,**kwargs):
        roles=self.get_queryset()  # 获取queryset，实际取queryset，也就是models.UserInfo.objects.all()
        page_res=self.paginate_queryset(queryset=roles)  #分页结果
        res=self.get_serializer(instance=page_res,many=True)  #序列化
        return Response(res.data)  #返回结果


#GenericViewSet
# 该视图类需要和路由配合使用,修改后的urls.py
# url(r'^api/v2/users', views.UserView.as_view({'get':'show','post':'create'})), #重写as_view方法，并对请求方法进行映射
# 不需要再去重写set和get的方法
class UserView_Set(GenericViewSet):            #视图
    queryset = models.UserInfo.objects.all()  #数据的queryset
    serializer_class = Userserializer         # 序列化类使用
    permission_classes = []                   # 权限认证，这里不做认证，前面章节也有介绍权限
    pagination_class = Mypagination #分页类，前面章节也已经介绍
    def show(self,*args,**kwargs):  #与url中映射的方法名称相同
        roles=self.get_queryset()  # 获取queryset，实际取queryset，也就是models.UserInfo.objects.all()
        page_res=self.paginate_queryset(queryset=roles)  #分页结果
        res=self.get_serializer(instance=page_res,many=True)  #序列化
        return Response(res.data)  #返回结果

    def create(self,*args,**kwargs):
        pass


# modelViewSet继承了mixins.CreateModelMixin、mixins.RetrieveModelMixin、mixins.UpdateModelMixin、mixins.DestroyModelMixin、mixins.ListModelMixin、GenericViewSet
# 所以它有很父类的所有功能，而这些父类分别提供创建、获取、更新、删除等方法，所以我们不需要写增删该查，
class UserView_Model(ModelViewSet):            #视图
    queryset = models.UserInfo.objects.all()  #数据的queryset
    serializer_class = Userserializer         # 序列化类使用
    permission_classes = []
    pagination_class = Mypagination #
